home *** CD-ROM | disk | FTP | other *** search
- 100 'Savings With Growing Deposits ("DEPGROWS")
- 110 CLS
- 120 COLOR 0,15 : PRINT "Savings With Growing Deposits" : COLOR 15,0
- 130 DEFDBL A-Z
- 140 DEFINT M-N
- 150 'Define function to convert annual rate to periodic rate
- 160 DEF FNCONV (V) = (1 + V / 100) ^ (1 / NPY) - 1
- 170 MONEYFMT$ = "$$##,###,###.##"
- 180 ' Let user select type of result
- 190 PRINT
- 200 PRINT "Select desired result:"
- 210 PRINT
- 220 PRINT "1 - Initial deposit"
- 230 PRINT "2 - Rate of growth in deposits"
- 240 PRINT "3 - Final balance"
- 250 PRINT
- 260 INPUT "Result number: ", RESULT
- 270 IF RESULT < 1 OR RESULT > 3 THEN PRINT "Select 1-3 only" : GOTO 210
- 280 PRINT
- 290 ' Let user enter data
- 300 PRINT "Do not enter dollar signs or commas"
- 310 PRINT
- 320 IF RESULT <> 1 THEN INPUT "Initial deposit: ", PV
- 330 IF RESULT <> 2 THEN INPUT "Annual growth rate in deposit (in percent): ", GROWTHRATE
- 340 IF RESULT <> 3 THEN INPUT "Savings goal: ", FV
- 350 INPUT "Annual interest rate (in percent): ", AR
- 360 INPUT "Number of periods: ", NPERIODS
- 370 INPUT "Number of periods per year: ", NPY
- 380 INPUT "Marginal tax rate (in percent): ", TAXRATE
- 390 INPUT "Annual inflation rate (in percent): ", INFLATION
- 400 PRINT
- 410 ' Compute periodic rates
- 420 PR = FNCONV (AR) 'Periodic interest rate
- 430 PR = PR * (1 - TAXRATE / 100) 'After-tax interest rate
- 440 GR = FNCONV (GROWTHRATE) 'Periodic growth in deposit
- 450 INFLATION = FNCONV (INFLATION) 'Periodic inflation rate
- 460 FV = FV * (1 + INFLATION) ^ NPERIODS
- 470 ON RESULT GOTO 490, 540, 690
- 480 ' Result 1: Find required initial deposit
- 490 PV = FV * (PR - GR) / (1 + PR)
- 500 IF PR <> GR THEN PV = PV / ( (1 + PR) ^ NPERIODS - (1 + GR) ^ NPERIODS) ELSE PV = FV * (1 + PR) ^ -NPERIODS / NPERIODS
- 510 PRINT "Required initial deposit: "; USING MONEYFMT$; PV
- 520 END
- 530 ' Result 2: Required growth in deposits
- 540 GRLOWER = -.5
- 550 GRUPPER = .5
- 560 WHILE ABS (GRUPPER - GRLOWER) > .00001
- 570 TRIALGR = (GRUPPER + GRLOWER) / 2
- 580 IF PR <> TRIALGR THEN TRIALFV = PV * (1 + PR) / (PR - TRIALGR)
- 590 TRIALFV = TRIALFV * ( (1 + PR) ^ NPERIODS - (1 + TRIALGR) ^ NPERIODS)
- 600 IF PR = TRIALGR THEN TRIALFV = NPERIODS * PV * (1 + PR) ^ NPERIODS
- 610 IF TRIALFV > FV THEN GRUPPER = TRIALGR ELSE GRLOWER = TRIALGR
- 620 WEND
- 630 GROWTHRATE = (GRUPPER + GRLOWER) / 2
- 640 GROWTHRATE = ( (1 + GROWTHRATE) ^ NPY - 1) * 100
- 650 PRINT "Required annual growth rate in deposit: ";
- 660 PRINT USING "###.##_%"; GROWTHRATE
- 670 END
- 680 ' Result 3: Find final balance
- 690 IF PR <> GR THEN FV = PV * (1 + PR) / (PR - GR)
- 700 IF PR <> GR THEN FV = FV * ( (1 + PR) ^ NPERIODS - (1 + GR) ^ NPERIODS)
- 710 IF PR = GR THEN FV = NPERIODS * PV * (1 + PR) ^ NPERIODS
- 720 FV = FV * (1 + INFLATION) ^ -NPERIODS 'Adjust for inflation
- 730 PRINT
- 740 PRINT "Final balance: "; USING MONEYFMT$; FV
- 750 END